package Utilities;


/*
 * Escala.java
 * Realizado por Paulo Chang, 11076
 *               Oscar Castañeda, 11086
 *               Francisco Martínez, 11096
 * Creado el 26 de agosto del 2011
 * Modificado por última vez el 30 de agosto del 2011
 * Esta clase representa a cada una de las escalas que conforman la ruta a
 * seguir de un barco. 
 */

/**
 * Clase Fecha
 * @author Oscar Castañeda
 */

import java.io.Serializable;
import java.util.Date;

public class Escala implements Serializable{
    
    /*-------------------------------------------------------------------------
     * Atributos
     */
    private Puerto puerto; //Puerto que se encuentra en la escala a realizar.
    private Date fechaEstimada, fechaReal; //Fechas estimada y real de llegada del 
                                           //barco a dicho puerto.
    private boolean yaLlego; //Indica si el barco ya pasó por dicha escala

    /*------------------------------------------------------------------------
     * Métodos
     */
    
    /**
     * Constructor: Crea una nueva escala, a partir de los parámetros recibidos.
     * @param puerto Puerto al cual se llegará en la escala.
     * @param fechaEstimada Instancia de la clase Date que contiene la fecha de llegada estimada del barco.
     */
    public Escala(Puerto puerto, Date fechaEstimada){
        this.puerto=puerto;
        this.fechaEstimada=fechaEstimada;
        this.fechaReal=new Date(0, 0, 0);
        this.yaLlego=false;
    }
    
    /**
     * getFechaReal: Devuelve la fecha real de llegada del barco.
     * @return fechaReal Fecha real de llegada al puerto correspondiente.
     */
    public Date getFechaReal() {
        if (yaLlego){
            return fechaReal;
        }else{
            return null;
        }
        
    }

    /**
     * setFechaReal: Permite modificar la fecha real de llegada del barco.
     * @param fechaReal Instancia de la clase Date que guarda la fecha de llegada real del barco a un puerto.
     */
    public void setFechaReal(Date fechaReal) {
        this.fechaReal=fechaReal;
        this.yaLlego=true;
    }

    /**
     * getPuerto: Devuelve el puerto correspondiente a la escala.
     * @return puerto Objeto de la clase Puerto correspondiente al puerto en la escala.
     */
    public Puerto getPuerto() {
        return puerto;
    }
    
    /**
     * llegaEntre: Permite saber si el barco llega a esta escala en un período dado.
     * @param fechaMenor Cota inferior de un período de tiempo dado.
     * @param fechaMayor Cota superior de un período de tiempo dado.
     * @return true si la fecha estimada de llegada a la escala está dentro del intervalo dado. 
     *         false si la fecha estimada de llegada a la escala no está dentro del intervalo dado.
     */
    public boolean llegaEntre(Date fechaMenor, Date fechaMayor){
       if ((this.fechaEstimada.after(fechaMenor))&&(this.fechaEstimada.before(fechaMayor))){
           return true;
       }else{
           return false;
       }
    }
    
    /**
     * toString: Devuelve información sobre la escala en forma de cadena de texto.
     * @return msj Un String con el puerto y fechas correspondientes a la escala.
     */
    @Override
    public String toString(){
        String msj;
        msj="Escala:";
        msj+="\n\tPuerto: "+puerto.getNombre();
        msj+="\n\tFecha estimada de arribo: "+ fechaEstimada;
        if (!yaLlego){
            msj+="\n\tEl barco aún no ha llegado al puerto.";
        }else{
            msj+="\n\tFecha real de arribo: "+ fechaReal;
        }
        return msj;
    }
}
